package com.mobmonkey.mobmonkeysdk.asynctasks;
import java.io.IOException;
import java.net.SocketException;
import java.util.List;
import java.util.Locale;
import org.apache.http.conn.ConnectTimeoutException;
import com.mobmonkey.mobmonkeysdk.utils.MMCallback;
import com.mobmonkey.mobmonkeysdk.utils.MMSDKConstants;
import android.content.Context;
import android.location.Address;
import android.location.Geocoder;
import android.os.AsyncTask;
import android.util.Log;
/**
* @author Dezapp, LLC
*
*/
public class MMGeocodeAsyncTask extends AsyncTask<Object, Void, Object> {
private static final String TAG = "MMGeocodeAsyncTask: ";
private Context context;
private MMCallback mmCallback;
public MMGeocodeAsyncTask(Context context, MMCallback mmCallback) {
this.context = context;
this.mmCallback = mmCallback;
}
@Override
protected Object doInBackground(Object... params) {
Geocoder gc = new Geocoder(context, Locale.getDefault());
List<Address> addresses = null;
Log.d(TAG, TAG + "geocoder present: " + Geocoder.isPresent());
if(Geocoder.isPresent()) {
try {
if(params[0] instanceof String) {
addresses = gc.getFromLocationName((String) params[0], 1);
} else if(params[0] instanceof Double) {
addresses = gc.getFromLocation((Double) params[0], (Double) params[1], 1);
}
} catch (ConnectTimeoutException e) {
e.printStackTrace();
return MMSDKConstants.CONNECTION_TIMED_OUT;
} catch (SocketException e) {
e.printStackTrace();
if(e.getMessage().equals(MMSDKConstants.OPERATION_TIMED_OUT)) {
return MMSDKConstants.CONNECTION_TIMED_OUT;
}
} catch (IOException e) {
e.printStackTrace();
if(e.getMessage().equals(MMSDKConstants.SERVICE_NOT_AVAILABLE)) {
return MMSDKConstants.SERVICE_NOT_AVAILABLE;
}
}
if (addresses != null && addresses.size() == 1) {
return addresses.get(0);
} else {
return null;
}
} else {
return MMSDKConstants.NO_GEOCODER_PRESENT;
}
}
@Override
protected void onPostExecute(Object result) {
super.onPostExecute(result);
mmCallback.processCallback(result);
}
}